package com.gitee.hifong45;

import java.util.Map;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;

public class FE extends RuntimeException {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -2097233911247666442L;
	
	public Integer code;
	public String msg;
	public String extMsg;
	
	public FE(Integer code, String msg, String...extMsgs) {
		this.code = code;
		this.msg = msg;
		if(extMsgs.length == 1) {
			this.extMsg = extMsgs[0];
		}
	}
	
	/**
	 *  如果对象为null，则抛出异常，中断执行
	 * @param obj 检测对象
	 * @param msg Msg内容
	 * @param extMsg 额外内容，会跟Msg对象中的msg属性拼接在一起
	 */
	public static void nullThrow(Object obj, Msg msg, String...extMsg) {
		if(obj == null) {
			throw new FE(msg.code, StrUtil.format("{} {}", extMsg.length == 1 ? extMsg[0] : "", msg.msg));
		}
		return;
	}

	/**
	 *  如果对象为null，则抛出异常，中断执行
	 * @param obj 检测对象
	 * @param extMsg 额外内容，会跟Msg对象中的msg属性拼接在一起
	 */
	public static void nullThrow(Object obj, String...extMsg) {
		if(obj == null) {
			throw new FE(Msg.CANNOT_BE_NULL.code, StrUtil.format("{} {}", extMsg.length == 1 ? extMsg[0] : "", Msg.CANNOT_BE_NULL.msg));
		}
		return;
	}

	public static void trueThrow(boolean exp, Msg msg, String...extMsg) {
		if(exp) {
			throw new FE(msg.code, msg.msg, extMsg);
		}
		return;
	}
	
	public static void falseThrow(boolean exp, Msg msg, String... extMsg) {
		if(!exp) {
			throw new FE(msg.code, msg.msg, extMsg);
		}
		return;
	}
	
	@Override
	public String toString() {
		String m = this.msg;
    	if(this.extMsg != null && this.extMsg.length() > 0) {
    		m  = m + " - "+ this.extMsg;
    	}
		return "{code:" + code + ", msg:" + m + ", tm:" + DateUtil.now() + "}";
	}

	public Map<String, Object> toMap() {
    	String m = this.msg;
    	if(this.extMsg != null && this.extMsg.length() > 0) {
    		m  = m + " - "+ this.extMsg;
    	}
    	return Kv.of("code", this.code, "msg", m , "tm", DateUtil.now());
    }

}
